<?php

/*
 * Table/EmployeDiplomeTable.php
 */

namespace RHX\Model\Table;

use RHX\Model\Object\EmployeDiplome;
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;

class EmployeDiplomeTable extends AbstractTableGateway {
    /**
     *
     * @var string Nom de la table
     */
    protected $table = 'rh_employe_diplome';

    /**
     * Constructeur
     *
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new EmployeDiplome($adapter));
	$this->initialize();
    }

    /**
     * Tous les Enregistrements
     *
     * @return type
     */
    public function getAll() {
	return $this->select();
    }

    /**
     * Tous les Diplomes d'un employé
     *
     * @param int $matricule
     * @return type
     */
    public function getByMatricule($matricule) {
	return $this->select(array('matricule' => $matricule));
    }

    /**
     * Tous les employés ayant le diplome
     *
     * @param type $diplome
     * @return type
     */
    public function getByDiplome($diplome) {
	return $this->select(array('diplome_id' => $diplome));
    }

    /**
     * Récupérer un enregistrement
     *
     * @param int $id
     * @return \RHX\Model\Object\EmployeDiplome
     * @throws \Exception
     */
    public function get($id) {
	$row = $this->select(array('id' => $id))
		->current();
	if (!$row) {
	    throw new \Exception("Impossible de trouver #$id");
	}

	return $row;
    }

    /**
     * Supprimer un Enregistrement
     *
     * @param int $id
     * @return int Nombre d'enregistrement affecté par la suppression
     */
    public function erase($id) {
	return $this->delete(array('id' => $id));
    }

    /**
     * Enregistrer un Employé Diplome
     *
     * @param \RHX\Model\Object\EmployeDiplome $ed
     * @return int Identifiant de l'enregistrement enregistré dans la base de données
     * @throws \Exception
     */
    public function save(EmployeDiplome $ed) {
	$data = array(
	    'matricule'	 => $ed->matricule,
	    'diplome_id'	 => $ed->diplome_id,
	    'remarque'	 => $ed->remarque,
	);

	$id = (int) $ed->id;
	if ($id == 0) {
	    $this->insert($data);

	    return $this->getLastInsertValue();
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));

	    return $id;
	}
	else {
	    throw new \Exception("Impossible de sélectionner #$id");
	}
    }

}

?>
